#include <STC15.H>
// stc15单片机 pwm产生的时钟源可以设置为 sysclk sysclk/2 sysclk/4 sysclk/6 sysclk/8 sysclk/12 和定时器T0
// 采用定时器T0为时钟源才可以设置任意频率 其他时钟源根据外部晶振确定
#define FOCS 11059200L
#define TIM (65536 - FOCS / 128000)
void Timer0Init(void) //
{
    AUXR |= 0x80;   //定时器时钟1T模式
    TMOD &= 0xF0;   //设置定时器模式
    TL0 = TIM;      //设置定时初始值
    TH0 = TIM >> 8; //设置定时初始值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
}

void main()
{
    P1M0 = 0x00;
    P1M1 = 0x00;
    Timer0Init(); // 初始化定时器0 作为产生pwm的时钟源

    P_SW1 &= ~(0X30); // 将外设功能寄存器P_SW1的CCP_S1和CCP_S0设置为0 pwm输出管脚为P1

    CCON = 0; //初始化PCA控制寄存器
              //PCA定时器停止
              //清除CF标志
              //清除模块中断标志
    CL = 0;   //复位PCA寄存器
    CH = 0;

    CMOD = 0X04; // 禁止PCA中断 设置时钟源为T0
    // CMOD = 0X02; // 禁止PCA中断 设置时钟源为sysclk/2 pwm频率=12M/2/128

    PCA_PWM0 = 0x40;        //PCA模块0工作于7位PWM
    CCAP0H = CCAP0L = 0x40; //PWM0的占空比为75% ((80H-40H)/80H)
    CCAPM0 = 0x42;          //PCA模块0启动PWM模式
    CR = 1;                 // 启动PCA计数

    while (1)
    {
        /* code */
    }
}